package com.tubeonfire.model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.TreeMap;
import java.util.logging.Logger;

import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheManager;

import com.tubeonfire.entity.Tube;

public class TagModel {

	private static Cache cache = null;

	private static String cachePrefix = "this_is_tag_pool";
	private static boolean isRegisted = false;
	private static final Logger log = Logger
			.getLogger(TagModel.class.getName());

	public static void init() {
		if (!isRegisted) {
			isRegisted = true;
			try {
				cache = CacheManager.getInstance().getCacheFactory()
						.createCache(Collections.emptyMap());
			} catch (CacheException e) {
				isRegisted = false;
			}
		}
	}

	@SuppressWarnings({ "unchecked" })
	public List<String> getTagPool() {
		TreeMap<String, String> tagPool = new TreeMap<String, String>();
		List<String> tags = new ArrayList<String>();
		try {
			init();
			if (cache != null && cache.containsKey(cachePrefix)) {
				tagPool = (TreeMap<String, String>) cache.get(cachePrefix);
			} else {
				TubeModel model = new TubeModel();
				model.setLimit(30);
				model.setPage(1);
				model.prepareLatestTube();
				if (model.getListResult().size() > 0) {
					for (Tube obj : model.getListResult()) {
						for (String string : obj.getTags()) {
							if (string.length() > 3) {
								tagPool.put(string, string);
							}
							if (tagPool.size() > 50) {
								break;
							}
						}
						if (tagPool.size() > 50) {
							break;
						}
					}
				}
			}
			if (tagPool.size() > 0) {
				for (String string : tagPool.keySet()) {
					tags.add(string);
				}
			} else {
				tags.add("tubeonfire");
				tags.add("tubeilike");
				tags.add("video");
				tags.add("clips");
				tags.add("ilike");
				tags.add("tube");
				tags.add("do");
				tags.add("you");
				tags.add("love");
				tags.add("this");
				tags.add("site");
			}
			cache.put(cachePrefix, tagPool);
		} catch (Exception e) {
			log.warning(e.getMessage());
			e.printStackTrace(System.err);
			tags = new ArrayList<String>();
			tags.add("tubeonfire");
			tags.add("tubeilike");
			tags.add("video");
			tags.add("clips");
			tags.add("ilike");
			tags.add("tube");
			tags.add("do");
			tags.add("you");
			tags.add("love");
			tags.add("this");
			tags.add("site");
		}
		if (tags.size() > 30) {
			tags = tags.subList(0, 30);
		}
		return tags;
	}
}
